1. Technical Field
The present invention generally relates to computer systems and in particular to decoupling the components of a computer software system.
2. Description of the Related Art
In Java, as well as in other object oriented programming languages, partitioning a complex system into disjoint parts such that no compile-time dependencies exists between components is a very difficult task. An inability to partition components causes development environments to become very large, even for simple tasks (e.g., making a small fix on one component). The large increase in the development environment is due to the required presence of most of the application on the classpath for compilation. Thus, compilation becomes a very slow process.
Additionally, remote classloading is inherently slow, which further increases compilation time. For applications that make extensive use of remote (universal record locator (URL)) classloading, it is logical to load only the classes that are absolutely necessary (i.e. “just enough” lazy loading). In the absence of some clean delineation of components, a decision about which classes are loaded at a given point in time is somewhat difficult.